package com.gl.buscaminas;

import com.gl.buscaminas.exceptions.BuscaminasOperacionInvalidaException;
import com.gl.buscaminas.exceptions.BuscaminasParametroNuloException;
import com.gl.buscaminas.exceptions.MensajesException;

public class BuscaminasJuego {

	private Tablero tablero;

	public void crearTablero(Integer filas, Integer columnas) {
		if (filas == null || columnas == null) {
			throw new BuscaminasParametroNuloException(
					(filas == null) ? MensajesException.MJE_PARAMETRO_FILA_NULO
							: MensajesException.MJE_PARAMETRO_COLUMNA_NULO);
		}
		this.tablero = new Tablero(filas, columnas);
	}

	public void ponerBomba(Integer fila, Integer columna) {
		if (this.tablero == null) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_CREAR_TABLERO);
		}
		if (fila == null || columna == null) {
			throw new BuscaminasParametroNuloException(
					(fila == null) ? MensajesException.MJE_PARAMETRO_FILA_NULO
							: MensajesException.MJE_PARAMETRO_COLUMNA_NULO);
		}
		this.tablero.ponerBomba(fila, columna);
	}

	public void comenzarJuego() {
		if (this.tablero == null) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_CREAR_TABLERO);
		}
		this.tablero.inicializarTablero();
	}

	public void destapar(Integer fila, Integer columna) {
		if (this.tablero == null) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_CREAR_TABLERO);
		} else if (this.tablero.obtenerEstadoJuego().equals(
				EstadosJuego.NO_INICIADO)) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_COMENZAR_JUEGO);
		}
		this.tablero.destapar(fila, columna);
	}

	public String obtenerEstadoTablero() {
		if (this.tablero == null) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_CREAR_TABLERO);
		}
		return this.tablero.obtenerEstadoTablero();
	}

	public String obtenerEstadoJuego() {
		if (this.tablero == null) {
			throw new BuscaminasOperacionInvalidaException(
					MensajesException.MJE_CREAR_TABLERO);
		}
		return this.tablero.obtenerEstadoJuego();
	}

}
